﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SharpArch.Domain.DomainModel;
using System.ComponentModel.DataAnnotations;

namespace ADIGRE.Domain
{
    public class Produto : Entity
    {
        [Display(Name = "Nome")]
        public virtual bool NmProduto { get; set; }
        [Display(Name = "É Matéria prima")]
        public virtual bool IsMaterialPrima { get; set; }
        public virtual TipoProduto TipoProduto { get; set; }

        public virtual bool IsAtivo { get; set; }
        [Display(Name = "Ativado em"), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
        public virtual DateTime? DtAtivado { get; set; }
        [Display(Name = "Ativado por")]
        public virtual Usuario UsuarioAtivado { get; set; }
        [Display(Name = "Desativado em"), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
        public virtual DateTime? DtDesativado { get; set; }
        [Display(Name = "Desativado por")]
        public virtual Usuario UsuarioDesativado { get; set; }
        
        //Log de estado
        [Display(Name = "Excluido"), Required]
        public virtual bool IsExcluido { get; set; }
        [Display(Name = "Excluido em"), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
        public virtual DateTime? DtDesabilitado { get; set; }
        [Display(Name = "Excluido por")]
        public virtual Usuario UsuarioDesabilitado { get; set; }
        [Display(Name = "Cadastrado em"), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
        public virtual DateTime? DtCadastro { get; set; }
        [Display(Name = "Cadastrado por")]
        public virtual Usuario UsuarioCadastro { get; set; }
        [Display(Name = "Última alteração em"), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
        public virtual DateTime? DtAlterado { get; set; }
        [Display(Name = "Alterado por")]
        public virtual Usuario UsuarioAlterado { get; set; }
        //Log de estado

        /// <summary>
        /// p.eduardo.silva - 20130529:
        /// Valída dados para que serem cadastrados
        /// </summary>
        /// <param name="user">Usuário da ação</param>
        private void ValidarCadastro(Usuario User)
        {
            this.UsuarioCadastro = User;
            this.DtCadastro = DateTime.Now;
            this.IsExcluido = false;
        }

        /// <summary>
        /// p.eduardo.silva - 20130529:
        /// Valída dados para que serem alterados
        /// </summary>
        /// <param name="user">Usuário da ação</param>
        private void ValidarAlteracao(Usuario User)
        {
            this.UsuarioAlterado = User;
            this.DtAlterado = DateTime.Now;
        }

        /// <summary>
        /// p.eduardo.silva - 20130529:
        /// Valída dados para que serem desabilitados
        /// </summary>
        /// <param name="user">Usuário da ação</param>
        public virtual void ValidarExclusao(Usuario User)
        {
            this.UsuarioDesabilitado = User;
            this.DtDesabilitado = DateTime.Now;
            this.IsExcluido = true;
        }

        /// <summary>
        /// p.eduardo.silva - 20130601:
        /// Valída dados para que serem atualizados
        /// </summary>
        /// <param name="user">Usuário da ação</param>
        public virtual void Validar(Usuario user)
        {
            if (this.Id > 0)
                ValidarAlteracao(user);
            else
                ValidarCadastro(user);

        }
    }
}
